package com.carkeeper.carType.controller;

import com.carkeeper.carType.service.CarTypeService;
import com.carkeeper.common.utils.POIUtils;
import com.carkeeper.common.utils.PageResult;
import com.carkeeper.common.utils.Result;
import com.carkeeper.common.utils.StatusCode;
import com.carkeeper.pojo.Brand;
import com.carkeeper.pojo.BrandType;
import com.github.pagehelper.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author zhangmingxin
 * @version 1.0
 * @date 2020/11/24 18:30
 * <p>
 * ***车型库模块
 */
@RestController
@Api(tags = "车型库管理接口api")//标签专门用来标注类的
@RequestMapping("/carType")
public class CarTypeController {

    @Autowired
    private CarTypeService carTypeService;

    /**
     * 文件上传 解析文件内容保存到数据库中
     *
     * @param exceFile
     * @return
     */
    @PostMapping("/upload")
    @ApiOperation("文件上传接口")//标注方法
    public Result upload(MultipartFile exceFile) throws IOException {
        //1.读取excl文件中的数据
        List<String[]> list = POIUtils.readExcel(exceFile);
        //2.遍历集合获取数据
        if (list != null && list.size() > 0) {
            //3.定义集合存储数据
            List<Brand> brandList = new ArrayList<>();
            Brand brand = new Brand();//存储品牌信息
            for (String[] strings : list) {
                String string1 = strings[0];//获取表中第一行第一个属性key
                String string2 = strings[1];//获取表中第一行第二个属性key
                brand.setName(string1);
                brand.setCountry(string2);
                brandList.add(brand);//将获取到对象保存到集合中
            }
            //实现数据新增
            carTypeService.addBrand(brandList);
        }
        return new Result(true, StatusCode.OK, "上传成功");
    }

    /**
     * 新增车标
     *
     * @param brand
     * @return
     */
    @PostMapping("/addCar")
    @ApiOperation("新增车标接口")//标注方法
    public Result add(@RequestBody Brand brand) {
        carTypeService.add(brand);
        return new Result(true, StatusCode.OK, "新增车标成功");
    }

    /**
     * 查询品牌列表
     * @return
     */
    @ApiOperation("查询列表接口")//标注方法
    @GetMapping("/findAll")
    public Result findAll(){
       List<Brand> brandList = carTypeService.findAll();
       return new Result(true,StatusCode.OK,"列表查询成功",brandList);
    }

    /**
     * 条件查询(车标名称+国别)
     * @param brand
     * @return
     */
    @ApiOperation("条件查询接口")//标注方法
    @GetMapping("/findByExample")
    public Result findByExample(Brand brand){
        return carTypeService.findByExample(brand);
    }

    /**
     * 根据品牌id查询品牌类型类别
     * @param id
     * @return
     */
    @ApiOperation("根据品牌id查询品牌类型类别接口")//标注方法
    @GetMapping("/findById/{id}")
    public Result findById(@PathVariable("id")Integer id){
        List<BrandType> brandTypeList = carTypeService.findById(id);
        return new Result(true,StatusCode.OK,"查询成功",brandTypeList);
    }

  /*  *
     * 分页查询
     * @param pageNum
     * @param pageSize
     * @return
   */
  @ApiOperation("分页查询接口")//标注方法
    @GetMapping("/searchMap/{pageNum}/{pageSize}")
    public Result findPage(@RequestParam Map searchMap, @PathVariable("pageNum")Integer pageNum, @PathVariable("pageSize")Integer pageSize){
        Page<Brand> brandTypePage = carTypeService.findPage(searchMap,pageNum,pageSize);
        PageResult pageResult = new PageResult<>(brandTypePage.getTotal(),brandTypePage.getResult());
        return new Result(true,StatusCode.OK,"分页查询成功",pageResult);
    }

}
